package com.stylefeng.guns.core.util;

import com.stylefeng.guns.core.enums.EnumInterface;

import java.lang.reflect.Method;
import java.util.LinkedHashMap;

/**
 * @Description: 枚举工具类
 * @Author: zhusheng
 * @Date: Created in 2018/6/1 16:15
 * @ModifyBy:
 */
public class EnumUtil {
    /**
     * 默认枚举包名
     */
    private static String enumPackage = "com.stylefeng.guns.core.enums";

    /**
     * 根据枚举类名字获取枚举类的所有属性的code和text
     * 要求枚举类必须继承EnumInterface类
     *
     * @param enumName String 枚举名称，如果有字符串中有点".",则使用enumName作为全限定名，如果没有使用默认枚举包名+enumName作为全限定名
     * @return LinkedHashMap 返回枚举类的所有属性的code和text的map集合，其中key=枚举的code，value=枚举的text
     */
    public static LinkedHashMap<String,String> listItems(String enumName){
        LinkedHashMap<String,String> result = new LinkedHashMap<>();
        if(null == enumName || enumName.trim().length() == 0){
            return result;
        }
        enumName = enumName.trim();

        if(enumName.indexOf(".") == -1){
            enumName = enumPackage + "." + enumName;
        }
        try {
            Class enumClass = Class.forName(enumName);
            Method method = enumClass.getMethod("values");
            EnumInterface[] enumInterfaces = (EnumInterface[]) method.invoke(null, null);
            for(EnumInterface enumInterface : enumInterfaces){
                result.put(enumInterface.getCode(), enumInterface.getText());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }
}
